关系运算符
在编写程序进行赋值的时候(==),注意将常量放在左边
unsigned int mask=0x80000000; //掩码
num&0x80000000:注意强制类型转化
使用“与”的情况:
①清0特定位 ②取某数中指定位
(公式:unsigned int mask=(unsigned int)((~(unsigned int)0)>>(32-(n-m+1))<<m);
左移以“0”补位,右移以符号位补位
若要都以“0”补位,那就需要以无符号数定义
使用“或”的情况:用来将源操作数某些位置1
使用“异或”的情况:①使特定位的值取反 ②不引用第三变量,交换两变量的值
用异或交换两变量的值:
int a=5;
int b=6;
a=a^b;
b=a^b;
a=a^b;
指针
定义:指针是一个变量,它保存的是地址
例:int num=5;其十六进制为0x00000005
&num=0x1000
地址的0x1000与字节的0x1000的定义不一样,因为两者的步长不一致
①int num=5;int *p=&num;(p=&num *p=num=*(&num))
②num=*p=**pp=*(&num);&num==p==*pp
③num=*p=**pp=***ppp=*(&num);&num==p==*pp=**ppp
num++:对num对应的内存空间的值加1
p++:对p对应的内存空间的值加1(步长)
*p:根据对应内存空间里保存的地址找到其对应的内存空间(对p指向的内存空间操作)
(*p)++的意义与num++一致
p++:0x1000加1 与(*pp)++ 一致
pp++:pp中0性0x2000加4,变为0x2004
***ppp:超过两个以上的*,则成为这个为远指针或者巨指针
野指针定义:随机指向一块内存的指针,会导致内存泄漏(原因:访问已经释放的内存或者访问里不存在的空间)
字符串就是首字符地址
用函数实现strlen:
int my_strlen(char *src)
{
int len=0;
while(src!='\0')
{
src++;
len++;
}
return len;
}
用函数实现strcpy:
char *my_strcpy(char *dest,char *src)
{
char *temp=dest;
while(*src!='\0')
{
*temp=*src;
src++;
temp++;
}
*temp='\0';
return dest;
}
用函数实现strncpy:
char *my_strncpy(char *dest,char *src,int n)
{
char *temp=dest;
int i=0;
while(*src!='\0')
{
for(i=0;i<n;i++)
{
*temp=*src;
src++;
dest++;
}
temp='\0';
return dest;
}
}
用函数实现strcat:
char *my_strcat(char *dest,char *src)
{
char *temp=dest;
while(*temp!='\0')
{
temp++;
}
while(*src!='\0')
{
*temp=*src;
src++;
temp++;
}
*temp='\0';
return dest;
}
用函数实现strncat:
char *my_strncat(char *dest,char *src,int n)
{
char *temp=dest;
int i=0;
while(*temp!=’\0’)
{
temp++;
}
for(i=0;i<n;i++)
{
*temp=*src;
src++;
temp++;
}
*temp=’\0’;
return dest;
}
用函数实现strcmp:
int my_strncpy(char *dest,char *src)
{
while(*src!=’\0’&&*dest!=’\0’)
{
If(*dest<*src)
{
return -1;
}
If(*dest>*src)
{
return 1;
}
src++;
dest++;
}
If(*src!=’\0’&&*dest==’\0’)
{
return -1;
}
If(*src==’\0’&&*dest==’\0’)
{
return 0;
}
If(*src==’\0’&&*dest!=’\0’)
{
return 1;
}
}
将十进制数转化为十六进制数:
#include<stdio.h>
char *int2hex(unsigned int num)
{
static char hex[11];
hex[0]=’0’;
hex[1]=’x’;
hex[10]=’\0’;
unsigned int mask=0x0000000f;
int i=0;
for(i=9;i>=0;i--)
{
hex[i]=num&mask;
if((unsigned int)(num&mask)<10)
{
hex[i]=(num&mask)+’0’;
}
if((unsigned int )(num&mask)>=10)
{
hex[i]=(num&mask)-10+’a’;
}
num=num>>4;
}
return hex;
}
int main()
{
unsigned int num;
printf(“please input a number:”);
scanf(“%d”,&num);
char *temp=int2hex(num)
printf(“the result is:%c\n”,temp);
}
比如说字符串dasheuhhellodfndsworldcni,输入头为hello,输入尾为world,那么结果为hellodfndsworld
程序为:
#include<stdio.h>
#include<string.h>
#define MAX_SIZE 1024
int my_strncmp(char *src,char *head,int len)
{
int i=0;
for(i=0;i<len;i++)
{
if(*(src+i)!=*(head+i))
{
return -1;
}
return 0
}
}
char *string(char *src,char *head,char *tail)
{
int h_len=strlen(head);
int t_len=strlen(tail);
char *temp;
while(*src!=’\0’)
{
if(my_strncmp(src,head,h_len)==0)
{
temp=src;
src=src+h_len;
while(*src!=’\0’)
{
if(my_strncmp(src,tail,t_len)==0)
{
*(src+t_len)=’\0’;
return temp;
}
src++;
}
return NULL;
}
src++;
}
return NULL;
}
int main()
{
char src[MAX_SIZE];
char head[MAX_SIZE];
char tail[MAX_SIZE];
printf(“please input string:”);
scanf(“%c”,src);
printf(“please input head:”);
scanf(“%c”,head);
printf(“please input tail:”);
scanf(“%c”,tail);
char *temp=string(src,head,tail);
printf(“temp=%c\n”,temp);
return 0;
}